#define COLOR_PRINT_IMPLEMENTATION
#include "color_print.h"  // 引入颜色输出库
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 跨平台获取当前工作目录
static char* get_current_dir(void) {
#ifdef _WIN32
    // Windows 平台实现
    char* buffer = malloc(MAX_PATH);
    if (buffer && GetCurrentDirectoryA(MAX_PATH, buffer)) {
        return buffer;
    }
#else
    // Linux/macOS 平台实现
    char* buffer = getcwd(NULL, 0);  // 自动分配足够大小的缓冲区
    return buffer;
#endif
    free(buffer);
    return NULL;
}

// 解析命令行参数（检查是否需要彩色输出）
static bool parse_args(int argc, char* argv[]) {
    for (int i = 1; i < argc; i++) {
        if (strcmp(argv[i], "--no-color") == 0) {
            // 禁用颜色（通过设置默认颜色为黑白）
            cprintf_set_default(COL_WHITE, COL_BG_BLACK, COL_NORMAL);
            return false;  // 不使用彩色
        } else if (strcmp(argv[i], "--help") == 0) {
            cprintfc(COL_CYAN, COL_BG_BLACK, COL_NORMAL, "用法: pwd [选项]\n");
            cprintfc(COL_CYAN, COL_BG_BLACK, COL_NORMAL, "显示当前工作目录\n");
            cprintfc(COL_CYAN, COL_BG_BLACK, COL_NORMAL, "选项:\n");
            cprintfc(COL_CYAN, COL_BG_BLACK, COL_NORMAL, "  --no-color   禁用彩色输出\n");
            cprintfc(COL_CYAN, COL_BG_BLACK, COL_NORMAL, "  --help       显示帮助信息\n");
            exit(0);
        } else {
            cprintfc(COL_RED, COL_BG_BLACK, COL_BOLD, "错误: 未知选项 '%s'\n", argv[i]);
            cprintfc(COL_YELLOW, COL_BG_BLACK, COL_NORMAL, "使用 '--help' 查看帮助\n");
            exit(1);
        }
    }
    return true;  // 使用彩色
}

int main(int argc, char* argv[]) {
    // 初始化颜色输出库
    color_init();  // 确保颜色支持已初始化

    // 设置默认颜色（路径用蓝色显示）
    cprintf_set_default(COL_BLUE, COL_BG_BLACK, COL_BOLD);

    // 解析命令行参数
    bool use_color = parse_args(argc, argv);

    // 获取当前工作目录
    char* cwd = get_current_dir();
    if (!cwd) {
        cprintfc(COL_RED, COL_BG_BLACK, COL_BOLD, "错误: 无法获取当前工作目录\n");
        return 1;
    }

    // 输出当前目录（带颜色或默认）
    if (use_color) {
        cprintf("%s\n", cwd);  // 使用彩色输出
    } else {
        printf("%s\n", cwd);   // 禁用彩色时使用标准输出
    }

    // 清理资源
    free(cwd);
    return 0;
}